﻿Imports Microsoft.Office.Interop.Excel
Imports System.Drawing

''' <summary>
''' Implémentation abstraite d'un tableau Excel
''' </summary>
''' <remarks></remarks>
Public MustInherit Class AbstractImplTableau
    Implements IImplTableau

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public MustOverride Sub DessineTableau(ByVal gestExcel As IGestionExcel, _
                                           ByVal titre As String, _
                                           ByVal tab As System.Data.DataTable, _
                                           ByVal numeroLigneHautGauche As Integer, _
                                           ByVal numeroColonneHautGauche As Integer) _
                                           Implements IImplTableau.DessineTableau

    ''' <summary>
    ''' Méthode Utilitaire permettant de simplifier le remplissage d'un tableau
    ''' </summary>
    ''' <param name="gestExcel"></param>
    ''' <param name="tab"></param>
    ''' <param name="numeroLigneHautGauche"></param>
    ''' <param name="numeroColonneHautGauche"></param>
    ''' <param name="encadrement"></param>
    ''' <remarks></remarks>
    Protected Sub RemplitDonnees(ByVal gestExcel As IGestionExcel, _
                                 ByVal tab As System.Data.DataTable, _
                                 ByVal numeroLigneHautGauche As Integer, _
                                 ByVal numeroColonneHautGauche As Integer, _
                                 ByVal encadrement As Boolean)
        Dim i As Integer = 0, j As Integer = 0
        Dim donnees(tab.Rows.Count - 1, tab.Columns.Count - 1) As Object
        'Remplissage des données dans un tableau temporaire
        For Each r As DataRow In tab.Rows
            j = 0
            For Each col As DataColumn In tab.Columns
                donnees(i, j) = r(col.ColumnName)
                j = j + 1
            Next
            i = i + 1
        Next
        'Mise en forme du tableau
        gestExcel.SelectionRange(gestExcel.AdresseCellTypeA1(numeroLigneHautGauche, numeroColonneHautGauche), _
                                gestExcel.AdresseCellTypeA1(numeroLigneHautGauche + tab.Rows.Count - 1, numeroColonneHautGauche + tab.Columns.Count - 1))
        gestExcel.EcrireTableau(donnees)
        If encadrement Then gestExcel.EncradrementRange(TypeEncadrement.ExtérieurRangeFin)
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="gestExcel"></param>
    ''' <param name="tab"></param>
    ''' <param name="numeroLigneHautGauche"></param>
    ''' <param name="numeroColonneHautGauche"></param>
    ''' <param name="encadrement"></param>
    ''' <remarks></remarks>
    Protected Sub RemplitTitre(ByVal gestExcel As IGestionExcel, _
                               ByVal tab As System.Data.DataTable, _
                               ByVal numeroLigneHautGauche As Integer, _
                               ByVal numeroColonneHautGauche As Integer, _
                               ByVal encadrement As Boolean)
        Dim j As Integer = 0
        Dim i As Integer = 0
        Dim colTitres(0, tab.Columns.Count - 1) As String

        'Ecriture des titres dans un tableau temporaire (pour accélerer l'affichage)
        For Each col As DataColumn In tab.Columns
            colTitres(0, j) = col.ColumnName
            j = j + 1
        Next
        'Mise en forme des titres de la table
        gestExcel.SelectionRange(numeroLigneHautGauche, numeroColonneHautGauche, _
                                 numeroLigneHautGauche, numeroColonneHautGauche + tab.Columns.Count - 1)
        gestExcel.EcrireTableau(colTitres)
    End Sub

End Class




